package com.example.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.common.Result;
import com.example.dto.CircuitDiagramDTO;
import com.example.entity.CircuitDiagram;
import com.example.service.CircuitDiagramService;
import com.example.vo.CircuitDiagramVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * 一次图结果控制器
 * 
 * @author system
 * @since 2024-01-01
 */
@RestController
@RequestMapping("/circuit-diagram")
@Slf4j
public class CircuitDiagramController {
    
    @Resource
    private CircuitDiagramService circuitDiagramService;
    
    /**
     * 分页查询一次图列表
     * 
     * @param current 当前页
     * @param size 每页大小
     * @param name 一次图名称（模糊查询）
     * @return 分页结果
     */
    @GetMapping("/page")
    public Result<IPage<CircuitDiagramVO>> getPage(
            @RequestParam(defaultValue = "1") Long current,
            @RequestParam(defaultValue = "10") Long size,
            @RequestParam(required = false) String name) {
        try {
            IPage<CircuitDiagram> page = new Page<>(current, size);
            IPage<CircuitDiagramVO> result = circuitDiagramService.getPage(page, name);
            return Result.success(result);
        } catch (Exception e) {
            log.error("查询一次图列表失败", e);
            return Result.error("查询一次图列表失败");
        }
    }
    
    /**
     * 根据ID获取一次图详情
     * 
     * @param id 一次图ID
     * @return 一次图详情
     */
    @GetMapping("/{id}")
    public Result<CircuitDiagramVO> getDetail(@PathVariable String id) {
        try {
            CircuitDiagramVO detail = circuitDiagramService.getDetailById(id);
            if (detail == null) {
                return Result.error("一次图不存在");
            }
            return Result.success(detail);
        } catch (Exception e) {
            log.error("获取一次图详情失败，ID：{}", id, e);
            return Result.error("获取一次图详情失败");
        }
    }
    
    /**
     * 保存一次图
     * 
     * @param dto 一次图数据
     * @return 保存结果
     */
    @PostMapping
    public Result<Boolean> save(@Valid @RequestBody CircuitDiagramDTO dto) {
        try {
            boolean result = circuitDiagramService.saveCircuitDiagram(dto);
            if (result) {
                return Result.success(true, "保存成功");
            } else {
                return Result.error("保存失败");
            }
        } catch (Exception e) {
            log.error("保存一次图失败", e);
            return Result.error("保存一次图失败");
        }
    }
    
    /**
     * 更新一次图
     * 
     * @param dto 一次图数据
     * @return 更新结果
     */
    @PutMapping
    public Result<Boolean> update(@Valid @RequestBody CircuitDiagramDTO dto) {
        try {
            if (dto.getId() == null) {
                return Result.error("一次图ID不能为空");
            }
            boolean result = circuitDiagramService.updateCircuitDiagram(dto);
            if (result) {
                return Result.success(true, "更新成功");
            } else {
                return Result.error("更新失败");
            }
        } catch (Exception e) {
            log.error("更新一次图失败", e);
            return Result.error("更新一次图失败");
        }
    }
    
    /**
     * 删除一次图
     * 
     * @param id 一次图ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> delete(@PathVariable String id) {
        try {
            boolean result = circuitDiagramService.deleteCircuitDiagram(id);
            if (result) {
                return Result.success(true, "删除成功");
            } else {
                return Result.error("删除失败");
            }
        } catch (Exception e) {
            log.error("删除一次图失败，ID：{}", id, e);
            return Result.error("删除一次图失败");
        }
    }
} 